/*
* Copyright (c) 2025 Shenzhen Kaihong Digital Industry Development Co., Ltd.
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/

#include "interfaces/c++/Node.h"
#include "interfaces/c++/MWServer.h"
#include "std_msgs/String.h"
#include <cstdint>
#include <iostream>
#include <thread>

int main() {
    if (!OHOS::OHMW::MWServer::IsRunning(OHOS::OHMW::MWServer::Type::DORA)) {
        std::cout << "MWServer is not running" << std::endl;
        return -1;
    }

    OHOS::OHMW::Node node("listener", OHOS::OHMW::Node::Type::DORA);
    int32_t ret = node.OnRecv("data", [](uint8_t* data, uint32_t data_len) {
        std::cout << "Received data: " << std::string(data, data + data_len) << std::endl;
    });
    if (ret != 0) {
        std::cout << "Failed to register data callback" << std::endl;
        return -1;
    }

    ret = node.OnRecvMsg<OHOS::OHMW::std_msgs::String>("msg", [](OHOS::OHMW::std_msgs::String& msg) {
        std::cout << "Received message: " << msg.data << std::endl;
    });
    if (ret != 0) {
        std::cout << "Failed to register message callback" << std::endl;
        return -1;
    }

    while (OHOS::OHMW::MWServer::IsRunning(OHOS::OHMW::MWServer::Type::DORA)) {
        std::this_thread::sleep_for(std::chrono::seconds(1));
    }

    return 0;
}
